package org.hzero.interfaces.common.annoations;


import org.hzero.interfaces.common.constants.KnifeInterfaceCodeEnum;
import org.hzero.interfaces.common.constants.KnifeInterfaceLogDirection;
import org.hzero.interfaces.common.helper.impl.KnifeAopMethodLogHelperImpl;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 1 用于service层上的方法日志监控注解，和{@link KnifeInterfaceLog}的主要区别在于处理参数的方式不同
 * 2 通过AOP进行日志监控,监控生成日志的处理通过{@link KnifeAopMethodLogHelperImpl}实现
 *
 * @author tianhao.luo@hand-china.com
 */
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD})
public @interface KnifeMethodLog {
    /**
     * 是否需要进行请求日志的记录
     *
     * @return 默认为需要记录
     */
    boolean value() default true;

    /**
     * 编码及描述
     *
     * @return 接口编码及描述枚举
     */
    KnifeInterfaceCodeEnum interfaceEnum();


    /**
     * 内部方法监控更细等级区分，便于区分定时任务和接口外部方法的监控
     *
     * @return 接口方向
     */
    KnifeInterfaceLogDirection interfaceLogDirection() default KnifeInterfaceLogDirection.METHOD;
}
